package Soligee.decorador;

import Soligee.controller.facade.sessionFacadeImplements.SessionFacadeBuscarImplements;
import java.util.List;


public class Paginacao {

    private int numeroDaPagina = 1;
    private int firstResult = 0;
    private int maxResult = 10;
    private int totalPaginas =0 ;
    private String ordenarPor;
 
    //construtor sem parâmetros
    public Paginacao(){
        this.setFirstResult(0); //seta o primeiro first result para 0
        this.setMaxResult(10); //set o primeiro max result para 10
        this.setNumeroDaPagina(1);//seta como pagina inicial a numero
    }
    //construtor com parâmetros
    public Paginacao(List lista,String ordenarPor){
        this.setFirstResult(0); //seta o primeiro first result para 0
        this.setMaxResult(10); //set o primeiro max result para 10
        this.setNumeroDaPagina(1);//seta como pagina inicial a numero
        this.setTotalPaginas(this.calculaTotalPaginas(lista));//seta o total de paginas
        this.setOrdernarPor(ordenarPor);
    }

    public int calculaTotalPaginas(List lista){
        System.out.print(lista.size());
        if((lista.size() % 10)!= 0){            
             return (lista.size()/10)+1;             
        }else
          return (lista.size()/10);
    }

   public List firstPage(Class classe) {
        this.setNumeroDaPagina(1);
        this.setFirstResult((this.getNumeroDaPagina()*10)-10);
        this.setMaxResult(this.getNumeroDaPagina()*10);
        SessionFacadeBuscarImplements sessionBusca = new SessionFacadeBuscarImplements();
        return sessionBusca.buscaComPaginacao(this.getFirstResult(),this.getMaxResult(),this.getOrdernarPor(),classe);
    }

    public List previousPage(Class classe) {
         int auxiliar = (this.getNumeroDaPagina() - 1);
         if(auxiliar == 0){
             return null;
         }else{
             if(auxiliar==1){
                 return this.firstPage(classe);
             }else{
                this.setNumeroDaPagina(auxiliar);
                  this.setFirstResult((this.getNumeroDaPagina()*10)-10);
                  this.setMaxResult(this.getNumeroDaPagina()*10);
                SessionFacadeBuscarImplements sessionBusca = new SessionFacadeBuscarImplements();
                return sessionBusca.buscaComPaginacao(this.getFirstResult(),this.getMaxResult(),this.getOrdernarPor(),classe);
             }  
         }
    }

    public List nextPage(Class classe) {
        this.setNumeroDaPagina(this.getNumeroDaPagina()+1);         
        this.setFirstResult((this.getNumeroDaPagina()*10)-10);
        this.setMaxResult(this.getNumeroDaPagina()*10);
        SessionFacadeBuscarImplements sessionBusca = new SessionFacadeBuscarImplements();
        return sessionBusca.buscaComPaginacao(this.getFirstResult(),this.getMaxResult(),this.getOrdernarPor(),classe);
            
    }

    public List lastPage(Class classe) {
        this.setNumeroDaPagina(this.getTotalPaginas());
        this.setFirstResult((this.getNumeroDaPagina()*10)-10);
        this.setMaxResult((this.getNumeroDaPagina()*10)-1);
        SessionFacadeBuscarImplements sessionBusca = new SessionFacadeBuscarImplements();
        return sessionBusca.buscaComPaginacao(this.getFirstResult(),this.getMaxResult(),this.getOrdernarPor(),classe);

    }

    public String getOrdernarPor() {
        return ordenarPor;
    }

    public void setOrdernarPor(String ordenarPor) {
        this.ordenarPor = ordenarPor;
    }

    public int getNumeroDaPagina() {
        return numeroDaPagina;
    }

   
    public void setNumeroDaPagina(int numeroDaPagina) {
        this.numeroDaPagina = numeroDaPagina;
    }

    public int getFirstResult() {
        return firstResult;
    }

   
    public void setFirstResult(int firstResult) {
        this.firstResult = firstResult;
    }

    public int getMaxResult() {
        return maxResult;
    }

    public void setMaxResult(int maxResult) {
        this.maxResult = maxResult;
    }

    public int getTotalPaginas() {
        return totalPaginas;
    }

  
    public void setTotalPaginas(int totalPaginas) {
        this.totalPaginas = totalPaginas;
    }


}
